package zjh_20230329;

import java.io.*;

public class FileCombiner {

    /**
     * 将指定目录中的多个文件片段依次序合并到同一个文件中，并返回合并后的文件体积
     *
     * @param dir    存放文件片段的目录(即拆分文件后的N个小文件的存放目录)
     * @param target 表示合并后的文件的存放路径
     * @return 返回合并后的文件体积
     */
    public long join(final File dir, final File target) {
        long size = 0;
        // 声明用于统计合并后的文件体积的变量
        try (FileOutputStream fileOutputStream = new FileOutputStream(target)) {
            File[] files = dir.listFiles();
            for (File f : files) {
                try (FileInputStream fileInputStream = new FileInputStream(f)) {
                    byte[] bytes = new byte[(int) f.length()];
                    int read = fileInputStream.read(bytes);
                    fileOutputStream.write(bytes);
                    size += read;
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 返回合并后的文件体积
        return size;
    }

    public static void main(String[] args) {

        FileCombiner fc = new FileCombiner();

        // 文件片段所在的目录
        File dir = new File("D:/kaifamiao/homework-resultset");

        // 合并后的文件存放路径和名称
        File target = new File("D:/kaifamiao/result.png");

        long n = fc.join(dir, target);

        System.out.println(n);

    }
}
